iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
Kubernetes

Think Again Kubernetes系列 第 15

深入 Scheduling Framework

  • 分享至 

  • xImage
  •  

Scheduling Framework

https://ithelp.ithome.com.tw/upload/images/20240924/2016913503klhWzkCH.png

Pod 只要被 Kubernetes Cluster 接受之後,就會被壓成 Pending State,由於 Pending State,是被用於初始化 Pod State,它是個非常 High Level 的狀態,這個狀態包含很多事情,除了下面提到的排程,也包含 Download Image,以及等待所有 Container 啟動完畢。

Scheduling Cycle

PreEnqueue

在進入下述補充提到的 ActiveQ 之前調用

PreFilter

會在進入 Filter 之前,先把所有的 Node 過濾一次,並建立 cache,PreFilter 在整個 Scheduling Cycle 只會呼叫一次。

Filter

檢查 PreFilter 過濾之後的 Node,是否符合條件,所以會被呼叫很多次

PostFilter

如果經過 Filter 階段沒有任何節點,就會進入 PostFilter 階段,Preemption 會在這邊發生。

PreScore

為每一個 Node 建立 Cache State

Score

用每一個 plugin 為每一個節點算分數,並在下個階段標準分數。

NormalizeScore

標準化分數用,如果 Score Plugin 有權重會在這邊處理。

Reserve

由於 Binding Cycle 是平行化執行,為了避免 Race Condition,所以在 Bind 之前要把 Node 的資源保留給 PodPermit:

在整個 Scheduling Cycle 的最後一個階段調用,如果任何一個 Plugins 失敗,將會退回 Reserve 階段把保留的資源釋出。

Binding Cycle

PreBind, Bind, PostBind:

Bind 就是把一個 Pod 綁定到一個 Node,失敗的話也會退回 Reserve 釋出保留的資源。

介紹完 Scheduling Framework,就會發現,哇,原本在 Extension 架構下的 Filter, Prioritize, Preemption, Bind, 被清楚的分開了,Scheduling Cycle 包含 Filter 以及 Score,在 Filter 完沒有節點就會進去 Preemption,Scheduling Cycle 負責找到一個節點,然後傳遞給 Bind Cycle 並行化處理,這樣的架構很乾淨,但是這個架構什麼問題呢?

問題出現在語言層次,Go plugin 本身,由於 Go plugin 要求 plugin 的編譯環境跟程式碼一致,這意味者沒有辦法在公有雲託管的 Kubernetes 使用,如果我們沒辦法使用 go plugin,這樣我們要怎麼擴充 kube-scheduler 呢?


kube-scheduler 有三個 Queue

ActiveQ

如果 Pod 馬上就可以排程,會進到這個 Q,預設情況下 QueueSort 會把 priority 最高的 Pod 放在前面

unschedulableQ

如果 Pod 要求的特定條件還沒完成,會進到這個 Q

podBackoffQ

如果 Pod 要求的特定資源正在創建,而且預期會創建完,比如說 Volume 正在建立,就會進到這個 Q

如果 Pod 的特定條件檢查失敗,會重回到這個 Queue,然後重試時間會隨者重試次數拉長,重試時間結束後再嘗試回到 ActiveQ

這三個 Q 可以移動,比如說 unschedulableQ 的 Pod 等到 ActiveQ 的 Pod 排程完,就滿足 affinity 的條件,然後就可以移動到 ActiveQ

https://ithelp.ithome.com.tw/upload/images/20240924/20169135sSXeN6prvW.png


應該是 Scheduling Framework 而不是 Scheduler Framework

Ref:
https://github.com/kubernetes/community/blob/f03b6d5692bd979f07dd472e7b6836b2dad0fd9b/contributors/devel/sig-scheduling/scheduler_queues.md


上一篇
深入 kube-scheduler : Scheduler Framework 以及 percentageOfNodesToScore
下一篇
Extend your scheduler - 賽後修訂
系列文
Think Again Kubernetes31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言